package com.cykj.pos.service;

import com.alibaba.fastjson.JSONObject;
import com.cykj.common.core.domain.AjaxResult;
import com.cykj.pos.domain.*;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cykj.pos.domain.dto.*;
import com.cykj.pos.domain.dto.ayg.ApiBaseParam;
import com.cykj.pos.domain.dto.ayg.ApiBaseResult;
import com.cykj.pos.profit.dto.ShareDetailDTO;
import com.cykj.pos.profit.dto.WalletDTO;
import com.sec.sdk.bean.BaseResponse;
import com.sec.sdk.exception.SecGatewayException;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 我的钱包Service接口
 *
 * @author ningbingwu
 * @date 2021-01-27
 */
public interface IBizWalletService extends IService<BizWallet> {
    /**
     * 清空钱包
     */
    void emptyWallet(Long userId);
    /**
     * 查询列表
     */
    List<BizWallet> queryList(BizWallet bizWallet);

    int getMyWalletIsNull();

    /**
     * 获取我的钱包账户信息
     * @param walletDTO
     * @return
     */
    public BizWallet getMyWallet(WalletDTO walletDTO);

    public void setPayPassword(WalletDTO walletDTO);

    /**
     * 根据用户id获取钱包
     * @param userId
     * @return
     */
    BizWallet getMyWalletByUserId(Long userId);

    /**
     * 提现预支付
     * @param cashOutDTO
     * @return
     */
    AjaxResult doCashOut(CashOutDTO cashOutDTO) throws Exception ;

    /**
     * 预支付回调方法
     * @param params
     * @return
     */
    String paymentCallBack(Map<String, String> params,String bizContent);

    /**
     * 通过merch_id查询钱包信息
     * @param list
     * @return
     */
    String queryWalletInfo(List<BizShareDetail> list, ShareDetailDTO shareDetailDTO);

    List<BizWallet> queryAllWallet();

    /**
     * 保存临时积分
     * @param bizTimeoutIntegral
     */
    void saveTimeoutIntegral(BizTimeoutIntegral bizTimeoutIntegral);

    /**
     * 查询所有未超时的临时积分
     * @return
     */
    List<BizTimeoutIntegral> queryNotTimeoutOrder();

    /**
     * 更改临时积分表的字段
     * @param bizTimeoutIntegral
     */
    void updateTemporaryIntegral(BizTimeoutIntegral bizTimeoutIntegral);

    /**
     * 通过merch_id查询钱包信息
     * @param bizTimeoutIntegral
     * @return
     */
    BizWallet getWalletInfoByMerchId(BizTimeoutIntegral bizTimeoutIntegral);

    /**
     * 更改临时积分表状态  完成
     * @param bizTimeoutIntegral
     */
    void updateTemporaryIntegralOver(BizTimeoutIntegral bizTimeoutIntegral);

    /**
     * 易支付支付功能
     * @param cashOutDTO
     * @return
     */
    AjaxResult pay(CashOutDTO cashOutDTO);

    /**
     * 易支付支付功能回调
     * @param param
     * @return
     */
    ApiBaseResult deliverapiCallback(ApiBaseParam param) ;

    /**
     * pos1.0结算打钱
     * @param merchs
     * @return
     */
    int savePosOneCloseMoney(List<MerchantCloseDTO> merchs, String hostDate, SynchronizationDataDTO sy);

    /**
     * 更新钱包
     * @param bizWallet1
     * @return
     */
    int updateWalletByUserId(BizWallet bizWallet1);

    /**
     * 保存服务费账单表
     * @param list
     * @return
     */
    int insertBizServiceBills(CashbackRecordDTO list);

    /**
     * 退还追溯订单向钱包中打钱
     * @param merchs
     * @param hostDate
     * @param sy
     * @return
     */
    int savePosOneCloseMoney2(List<MerchantCloseDTO> merchs, String hostDate, SynchronizationDataDTO sy);

    /**
     * 退钱
     * @param list
     * @return
     */
    void independentAccount(List<BizProfitDeatail> list);

    /**
     * 点灵工预提现
     * @param cashOutDTO
     * @return
     */
    AjaxResult payDLG(CashOutDTO cashOutDTO);

    /**
     * 点灵工提现回调
     * @param param
     * @return
     */
    String deliverapiCallbackDLG(ReceiverParam param);

    /**
     * 薪龙预支付
     * @param submitGrantDetailDTO
     * @return
     */
    AjaxResult payXinLongDLG(BizAgentidAppkeyDTO bizAgentidAppkeyDTO,SubmitGrantDetailDTO submitGrantDetailDTO, BizMicroInfo bizMicroInfoByMerchId, String natchno);

    String deliverapiCallbackXinLongDLG(JSONObject jsonObject);

    JSONObject getSearchMer(BizAgentidAppkeyDTO bizAgentidAppkeyDTO) throws Exception;
    void with(BizMerchant merchant, BizCashoutRecords cashoutRecords);
    AjaxResult payFeiShunDLG(BizAgentidAppkeyDTO bizAgentidAppkeyDTO,SubmitGrantDetailDTO submitGrantDetailDTO, BizMicroInfo bizMicroInfoByMerchId, String natchno);

    AjaxResult payYLG(SubmitGrantDetailDTO submitGrantDetailDTO, BizMicroInfo bizMicroInfoByMerchId, String natchno);

    List<BizYlgWithdrawalPoll> getYlgWithdrawalList();

    void queryYlgWithdrawalStatus(BizYlgWithdrawalPoll bizYlgWith);

    Map<String, Object> hyqWithdrawal(String orderNo, String settleAccount, BizMicroInfo bizMicroInfo);
}
